﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using IT_Tracker.ENTIDADES;
using IT_Tracker.DADOS;
using System.Data.SqlClient;
using System.Collections;
using System.Net.Mail;
using System.Net;
using System.IO;
using ComponentFactory.Krypton.Toolkit;


namespace IT_Tracker
{
    public partial class Form_Ticket : KryptonForm
    {
        public Form_Ticket(Usuario suser)
        {
            InitializeComponent();
            sessionUser = suser;


        }


        private void Form_Ticket_Load(object sender, EventArgs e)
        {
            this.kdg_Ticket.CellFormatting += kdg_Ticket_CellFormatting;
            modoSel();
        }

        #region ***********************************************************Validações e Formatações

        private void formataGridView()
        {
            var gdvTkt = kdg_Ticket;


            gdvTkt.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders;
            gdvTkt.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;

            //altera a cor das linhas alternadas no grid      
            //gdvTkt.RowsDefaultCellStyle.BackColor = Color.White;
            //gdvTkt.AlternatingRowsDefaultCellStyle.BackColor = Color.WhiteSmoke;            

            gdvTkt.RowsDefaultCellStyle.SelectionBackColor = Color.LightSkyBlue;

            //altera o nome das colunas
            gdvTkt.Columns[0].HeaderText = "Ticket";
            gdvTkt.Columns[1].HeaderText = "Chamado";
            gdvTkt.Columns[2].HeaderText = "Status";
            gdvTkt.Columns[3].HeaderText = "Area";
            gdvTkt.Columns[4].HeaderText = "Tipo";
            gdvTkt.Columns[5].HeaderText = "Descricão";
            gdvTkt.Columns[6].HeaderText = "Operação";
            gdvTkt.Columns[7].HeaderText = "Data de Abertura";
            gdvTkt.Columns[8].HeaderText = "Previsão";
            gdvTkt.Columns[9].HeaderText = "Data de Conclusão";
            gdvTkt.Columns[10].HeaderText = "Resumo";
            gdvTkt.Columns[11].HeaderText = "Fornecedor";
            gdvTkt.Columns[12].HeaderText = "Tratamento Por";
            gdvTkt.Columns[13].HeaderText = "Ult. Atualização";
            gdvTkt.Columns[14].HeaderText = "Criado Por";

            gdvTkt.Columns[0].Width = 50;
            gdvTkt.Columns[1].Width = 65;
            gdvTkt.Columns[2].Width = 100;
            gdvTkt.Columns[3].Width = 70;
            gdvTkt.Columns[5].Width = 400;
            gdvTkt.Columns[7].Width = 100;
            gdvTkt.Columns[12].Width = 120;
            gdvTkt.Columns[13].Width = 100;

            gdvTkt.RowHeadersVisible = false;
            gdvTkt.Columns[4].Visible = false;
            gdvTkt.Columns[6].Visible = false;
            gdvTkt.Columns[10].Visible = false;
            gdvTkt.Columns[11].Visible = false;
            gdvTkt.Columns[14].Visible = false;


            //seleciona a linha inteira
            gdvTkt.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            //não permite seleção de multiplas linhas
            gdvTkt.MultiSelect = false;
            // exibe nulos formatados
            gdvTkt.DefaultCellStyle.NullValue = " - ";
            //Formatar dados de acordo com seus valores

            //somente leitura
            gdvTkt.ReadOnly = true;

            //permite que o texto maior que célula não seja truncado
            gdvTkt.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
            //alinha o cabeçalho do datagrid
            gdvTkt.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            //alinha conteudo do datagrid centralizado
            gdvTkt.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            //alinha apenas a coluna descricao a esquerda
            gdvTkt.Columns[5].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
            //Ordenação de exibição
            gdvTkt.Sort(gdvTkt.Columns[7], ListSortDirection.Descending);


        }

        private void modoSel()
        {
            rbutton_TktAdd.Enabled = false;
            rbutton_TktAlterar.Enabled = false;
            rbutton_TktRemove.Enabled = false;
            rbutton_TktAtualizar.Enabled = false;
            treeView.Enabled = false;
            txtMessagem.Text = "";
            tabBusca.Visible = false;
            rbtnMail.Enabled = false;

        }

        private void modoADD()
        {
            rbutton_TktAdd.Enabled = true;
            rbutton_TktAlterar.Enabled = false;
            rbutton_TktRemove.Enabled = false;
            rbutton_TktAtualizar.Enabled = false;
            treeView.Enabled = true;
            txtMessagem.Text = "";
            tabBusca.Visible = true;
            rbtnMail.Enabled = false;
        }

        private void modoRemAlt()
        {
            rbutton_TktAdd.Enabled = true;
            rbutton_TktAlterar.Enabled = true;
            rbutton_TktRemove.Enabled = true;
            rbutton_TktAtualizar.Enabled = true;
            treeView.Enabled = true;
            tabBusca.Visible = true;
            rbtnMail.Enabled = false;
        }


        #endregion

        #region ***********************************************************Declarações

        static public string retorno;
        string fornecedor;

        int codigoSelecionado;


        //Entidades/Classes

        Usuario sessionUser = new Usuario();
        ArrayList cOperacao = new ArrayList();
        ArrayList cTipo = new ArrayList();

        //Manipulação Banco
        PersistenciaBDTicket bdTkt = new PersistenciaBDTicket();
        Ticket tkt = new Ticket();

        //Banco de Dados
        SqlConnection sqlCon = new SqlConnection();
        SqlDataAdapter daTkt = new SqlDataAdapter();
        DataSet dsTkt = new DataSet();
        //string sqlcommand;

        private string conString = @"Data Source=STO-DSK-CC001\SQLEXPRESS;Initial Catalog=TicketOlosDB;Integrated Security=True; User Id=prvuser; Password=prvuser;";

        //variaveis filtros
        string filtroMes;
        string filtroMesFim;
        string filtroTipo;
        string filtroStatus;
        string filtroStatus2;
        string filtroArea;
        string filtroChamado;
        string filtroDescricao;

        #endregion

        #region ***********************************************************Eventos

        private void Form_Ticket_Resize(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                FormMain fmain = new FormMain();
                fmain.WindowState = FormWindowState.Minimized;
            }
        }

        #region *****************************************Eventos DataGrid

        private void kdg_Ticket_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            AtualizaTicket();

        }


        private void kdg_Ticket_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            //Formatação das celulas - Pendente = Vermelho
            if (e.Value != null && e.ColumnIndex == 2 && e.Value.Equals("Pendente"))
            {
                e.CellStyle.ForeColor = Color.Red;
            }
            //Formatação das celulas - Em Andamento = Amarelo
            if (e.Value != null && e.ColumnIndex == 2 && e.Value.Equals("Em Andamento"))
            {
                e.CellStyle.ForeColor = Color.YellowGreen;

            }
            //Formatação das celulas - **POG** Se a data for igual ao valor associado a empty 
            if (e.Value != null && e.ColumnIndex == 9 && e.Value.Equals(Convert.ToDateTime("01/01/1900 00:00:00")))
            {
                e.Value = "-";
            }
            //Formatação das celulas - **POG** Se a data for igual ao valor associado a empty 
            if (e.Value != null && e.ColumnIndex == 8 && e.Value.Equals(Convert.ToDateTime("01/01/1900 00:00:00")))
            {
                e.Value = "-";
            }
        }

        private void kdg_Ticket_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                codigoSelecionado = int.Parse(kdg_Ticket.Rows[e.RowIndex].Cells[0].Value.ToString());

                string forn = kdg_Ticket.Rows[e.RowIndex].Cells[11].Value.ToString();
                Ticket tktpesq = Pesquisar(codigoSelecionado, forn);

                if (tktpesq != null)
                {
                    txtMessagem.Text = tktpesq.Resumo;
                    modoRemAlt();
                }
                else
                {
                    this.lboxMessage.Items.Insert(0, "** " + DateTime.Now.ToString() + " ** Ticket #" + Convert.ToString(tktpesq.ticket) + " não encontrado!");
                }
            }



        }

        private void kdg_Ticket_CellMouseLeave(object sender, DataGridViewCellEventArgs e)
        {
            var gdvTkt = kdg_Ticket;
            int rindex = e.RowIndex;
            if (rindex >= 0)
            {
                gdvTkt.Rows[rindex].DefaultCellStyle.BackColor = Color.White;
            }

            /* //se a linha for par altera a cor
            if (rindex % 2 == 0)   
            {            
            }
            */
        }

        private void kdg_Ticket_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
        {
            var gdvTkt = kdg_Ticket;
            int rindex = e.RowIndex;
            if (rindex >= 0)
            {
                gdvTkt.Rows[rindex].DefaultCellStyle.BackColor = Color.AliceBlue;
            }

        }
        #endregion

        #region *****************************************Eventos Botões Ticket

        private void rbtnMail_Click(object sender, EventArgs e)
        {
            string resultado = enviarMail();
            this.lboxMessage.Items.Insert(0, resultado);
        }


        private void btnBuscaTitulo_Click(object sender, EventArgs e)
        {
            string buscaTIT = txtBuscaDescrição.TextBoxText;
            Filtro("01/01/1900", "01/01/2030", "%", "%", "%", "%", "%", '%' + buscaTIT + "%", fornecedor, "%", "01/01/2030");
            txtBuscaDescrição.TextBoxText = "";

        }

        private void btnBuscaNumero_Click(object sender, EventArgs e)
        {
            string buscaNUM = txtBuscaNumero.TextBoxText;
            Filtro("01/01/1900", "01/01/2030", "%", "%", "%", "%", "%" + buscaNUM + "%", "%", fornecedor, "%", "01/01/2030");
            txtBuscaNumero.TextBoxText = "";
        }

        #region **********************************************Botões CRUD


        private void rbutton_TktAlterar_Click(object sender, EventArgs e)
        {
            Ticket tktALT = new Ticket();
            DialogResult confirmaAlt = MessageBox.Show("Tem Certeza Que Deseja Alterar o Ticket?", "Alteração de Ticket", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2);

            if (confirmaAlt == DialogResult.Yes)
            {
                try
                {
                    //Acha as informações do ticket o ticket baseado na variavel codigoSelecionado que é alterado em cada evento de mouseclick do DG
                    tktALT = Pesquisar(codigoSelecionado, fornecedor);
                }
                catch (Exception ex)
                {
                    this.lboxMessage.Items.Insert(0, "** " + DateTime.Now.ToString() + " ** Error -> " + ex.Message);
                }

            }
            Form_TicketALT formtktalt = new Form_TicketALT(fornecedor, cTipo, cOperacao, sessionUser, tktALT);

            formtktalt.ShowDialog();
            if (retorno != null)
            {
                lboxMessage.Items.Insert(0, retorno);
                retorno = null;
                Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
            }

        }


        private void rbtnAtualizar_Click(object sender, EventArgs e)
        {
            AtualizaTicket();
        }



        private void rbutton_TktRemove_Click(object sender, EventArgs e)
        {
            DialogResult confirmaExc = MessageBox.Show("Tem Certeza Que Deseja Excluir o Ticket?", "Excluir Ticket", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2);

            if (confirmaExc == DialogResult.Yes)
            {
                try
                {
                    bdTkt.deletarTicket(codigoSelecionado, fornecedor, "spTicketDel");
                    this.lboxMessage.Items.Insert(0, "** " + DateTime.Now.ToString() + " ** Ticket #" + codigoSelecionado + " excluído com sucesso!");
                    Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
                    modoADD();

                }
                catch (Exception ex)
                {
                    this.lboxMessage.Items.Insert(0, "** " + DateTime.Now.ToString() + " ** Error -> " + ex.Message);
                }

            }

        }


        private void rbutton_TktAdd_Click(object sender, EventArgs e)
        {

            Form_TicketADD formtktadd = new Form_TicketADD(fornecedor, cTipo, cOperacao, sessionUser);
            formtktadd.ShowDialog();
            if (retorno != null)
            {
                lboxMessage.Items.Insert(0, retorno);
                retorno = null;
                Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
            }
        }

        #endregion

        #region *****************************************Botões Fornecedores
        private void rbutton_Olos_Click(object sender, EventArgs e)
        {
            modoADD();

            cOperacao.Clear();
            cTipo.Clear();

            cTipo.Add("Front");
            cTipo.Add("Gravação");
            cTipo.Add("Plataforma");
            cTipo.Add("Relatório");
            cTipo.Add("Telefonia");
            cTipo.Add("Desempenho");
            cTipo.Add("Outros");

            cOperacao.Add("Itau");
            cOperacao.Add("Televendas PE");
            cOperacao.Add("Televendas CE");
            cOperacao.Add("Provider");

            fornecedor = "Olos";
            Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
        }

        private void rbutton_Voran_Click(object sender, EventArgs e)
        {
            modoADD();

            cOperacao.Clear();
            cTipo.Clear();

            cTipo.Add("Sistema");
            cTipo.Add("Relatório");
            cTipo.Add("Outros");

            cOperacao.Add("NeoEnergia");
            cOperacao.Add("Celpe");
            cOperacao.Add("Cosern");
            cOperacao.Add("Coelba");
            cOperacao.Add("Sebrae");
            cOperacao.Add("Provider");

            fornecedor = "Voran";
            Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
        }

        private void rbutton_Digitro_Click(object sender, EventArgs e)
        {
            modoADD();

            cOperacao.Clear();
            cTipo.Clear();

            cTipo.Add("Gravação");
            cTipo.Add("Telefonia");
            cTipo.Add("Sistemas");
            cTipo.Add("Plataforma");
            cTipo.Add("Relatório");
            cTipo.Add("Outros");

            cOperacao.Add("Dental Plan");
            cOperacao.Add("Sebrae");
            cOperacao.Add("Carrefour");
            cOperacao.Add("Cemar");
            cOperacao.Add("Sec. Educação");
            cOperacao.Add("Sec. Saúde");
            cOperacao.Add("Provider");

            fornecedor = "Digitro";
            Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
        }

        private void rbutton_Teclan_Click(object sender, EventArgs e)
        {
            modoADD();

            cOperacao.Clear();
            cTipo.Clear();

            cTipo.Add("Telefonia");
            cTipo.Add("Relatório");
            cTipo.Add("Front End");
            cTipo.Add("Desempenho");
            cTipo.Add("Outros");

            cOperacao.Add("Carrefour");
            cOperacao.Add("Provider");

            fornecedor = "Teclan";
            Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
        }

        private void rbuttonTecnet_Click(object sender, EventArgs e)
        {
            modoADD();

            cOperacao.Clear();
            cTipo.Clear();

            cTipo.Add("Gravação");
            cTipo.Add("Sistema");
            cTipo.Add("Relatório");
            cTipo.Add("Telefonia");
            cTipo.Add("Desempenho");
            cTipo.Add("URA");
            cTipo.Add("Outros");

            cOperacao.Add("NeoEnergia");
            cOperacao.Add("INSS");
            cOperacao.Add("Celpe");
            cOperacao.Add("Cosern");
            cOperacao.Add("Coelba");
            cOperacao.Add("Provider");

            fornecedor = "Tecnet";
            Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
        }

        private void rbuttonOI_Click(object sender, EventArgs e)
        {
            modoADD();

            cTipo.Add("Link");

            cOperacao.Add("Itau");

            fornecedor = "OI";
            Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, "%", "01/01/2030");

        }

        #endregion
        #endregion

        #endregion

        #region ***********************************************************Métodos


        //Tratamento da Arvore de Filtragem
        private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Node != null)
            {
                // Update the details header with selected node values


                string filtro = e.Node.Text;

                if (e.Node.Parent != null && e.Node.Parent.Text != "Chamados Pendentes" && e.Node.Parent.Text != "Todos Chamados") //Verifica se a seleção é no node filho, evitar filtros a partir do node pai
                {
                    kryptonHeaderGroupDetails.ValuesPrimary.Heading = e.Node.Text;
                    string categoria = e.Node.Parent.Text;

                    if (e.Node.Parent.Text == "Status do Chamado")
                    {
                        Filtro("01/01/1900", "01/01/2030", filtro, filtro, "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
                        rbtnMail.Enabled = false;

                    }
                    else
                    {


                        if (e.Node.Parent.Parent.Text == "Todos Chamados")
                        {
                            switch (categoria)
                            {
                                case "Status do Chamado":
                                    Filtro("01/01/1900", "01/01/2030", filtro, filtro, "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
                                    rbtnMail.Enabled = false;
                                    break;

                                case "Ultima Atualização":
                                    Filtro("01/01/1900", "01/01/2030", "%", "%", "%", "%", "%", "%", fornecedor, filtro, "01/01/2030");
                                    rbtnMail.Enabled = false;
                                    break;

                                case "Area":
                                    Filtro("01/01/1900", "01/01/2030", "%", "%", "%", filtro, "%", "%", fornecedor, "%", "01/01/2030");
                                    rbtnMail.Enabled = false;
                                    break;

                                default:
                                    Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
                                    rbtnMail.Enabled = false;
                                    break;
                            }
                        }

                        if (e.Node.Parent.Parent.Text == "Chamados Pendentes")
                        {
                            switch (categoria)
                            {
                                case "Ultima Atualização":
                                    if (filtro == "Sem Atualização 12h")
                                    {
                                        Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "Suporte", "%", "%", fornecedor, "%", Convert.ToString(DateTime.Now));
                                        
                                        if (fornecedor == "Olos")
                                        { rbtnMail.Enabled = true; }
                                        
                                    }
                                    else
                                    {
                                        Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, filtro, "01/01/2030");
                                        rbtnMail.Enabled = false;
                                    }
                                    break;

                                case "Area":
                                    Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", filtro, "%", "%", fornecedor, "%", "01/01/2030");
                                    rbtnMail.Enabled = false;
                                    break;

                                default:
                                    Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
                                    rbtnMail.Enabled = false;
                                    break;
                            }
                        }
                    }

                }
                else
                {
                    kryptonHeaderGroupDetails.ValuesPrimary.Heading = "Tickets";
                    Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
                    rbtnMail.Enabled = false;
                }



            }
            else
            {
                // Should never happen, but just in case!
                kryptonHeaderGroupDetails.ValuesPrimary.Heading = "Details";
                kryptonHeaderGroupDetails.ValuesPrimary.Image = null;
            }

        }

        //Filtragem de Filtro a Partir dos Parametros Passados
        private void Filtro(string filtroDataAbertura, String filtroDatafim, String filtroStatus, String filtroStatus2, String filtroTipo,
            String filtroArea, String filtroChamado, String filtroDescricao, String filtroFornecedor, String filtroUsuario, string DataAtualizacao)
        {
            sqlCon.ConnectionString = conString;
            try
            {
                if (sqlCon.State.Equals(ConnectionState.Closed))
                    sqlCon.Open();

                // Seleciona todos os registros
                daTkt.SelectCommand = new SqlCommand("spTicketFiltro");

                daTkt.SelectCommand.CommandType = CommandType.StoredProcedure;
                daTkt.SelectCommand.Parameters.AddWithValue("@DataAbertura", filtroDataAbertura);
                daTkt.SelectCommand.Parameters.AddWithValue("@Datafim", filtroDatafim);
                daTkt.SelectCommand.Parameters.AddWithValue("@Status", filtroStatus);
                daTkt.SelectCommand.Parameters.AddWithValue("@Tipo", filtroTipo);
                daTkt.SelectCommand.Parameters.AddWithValue("@Status2", filtroStatus2);
                daTkt.SelectCommand.Parameters.AddWithValue("@Area", filtroArea);
                daTkt.SelectCommand.Parameters.AddWithValue("@Descricao", filtroDescricao);
                daTkt.SelectCommand.Parameters.AddWithValue("@Chamado", filtroChamado);
                daTkt.SelectCommand.Parameters.AddWithValue("@Fornecedor", filtroFornecedor);
                daTkt.SelectCommand.Parameters.AddWithValue("@Usuario", filtroUsuario);
                daTkt.SelectCommand.Parameters.AddWithValue("@DataAtualizacao", DataAtualizacao);

                daTkt.SelectCommand.Connection = sqlCon;
                //daTkt.FillSchema(dsTkt, SchemaType.Source, "tbTicket" + fornecedor);

                daTkt.FillSchema(dsTkt, SchemaType.Source, "tbTickets");

                dsTkt.Clear(); // limpa o dataset antes de atualizar a tabela, para evitar repetições
                daTkt.Fill(dsTkt, "tbTickets");

                // preenche o datagridview                
                kdg_Ticket.DataSource = dsTkt;
                kdg_Ticket.DataMember = "tbTickets";

                sqlCon.Close();
                formataGridView();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            finally
            {
                if (sqlCon.State.Equals(ConnectionState.Open))
                    sqlCon.Close();
            }

        }

        //Localiza um Determinado Ticket Pelo Numero
        private Ticket Pesquisar(int ticket, string forn)
        {
            Ticket t = bdTkt.GetTicket(ticket, forn, "spTicketLocaliza");
            return t;
        }

        //Faz a atualização do Ticket
        private void AtualizaTicket()
        {

            Ticket tktA = new Ticket();
            try
            {
                //Acha as informações do ticket o ticket baseado na variavel codigoSelecionado que é alterado em cada evento de mouseclick do DG
                tktA = Pesquisar(codigoSelecionado, fornecedor);
            }
            catch (Exception ex)
            {
                this.lboxMessage.Items.Insert(0, "** " + DateTime.Now.ToString() + " ** Error -> " + ex.Message);
            }

            Form_TicketAtualiza formatualiza = new Form_TicketAtualiza(fornecedor, sessionUser, tktA);
            formatualiza.ShowDialog();

            if (retorno != null)
            {
                lboxMessage.Items.Insert(0, retorno);
                retorno = null;
                Filtro("01/01/1900", "01/01/2030", "Em Andamento", "Pendente", "%", "%", "%", "%", fornecedor, "%", "01/01/2030");
            }

        }


        //Faz uma Copia Do DataGrid
        private DataGridView CopyDataGridView(DataGridView dgv_org)
        {
            //cria o datagrid espelho
            DataGridView dgv_copy = new DataGridView();

            try
            {
                //copia as colunas do datagrid
                if (dgv_copy.Columns.Count == 0)
                {
                    foreach (DataGridViewColumn dgvc in dgv_org.Columns)
                    {
                        dgv_copy.Columns.Add(dgvc.Clone() as DataGridViewColumn);
                    }
                }

                DataGridViewRow row = new DataGridViewRow();

                //copia as linhas do datagrid
                for (int i = 0; i < dgv_org.Rows.Count; i++)
                {
                    row = (DataGridViewRow)dgv_org.Rows[i].Clone();
                    int intColIndex = 0;

                    //copia o conteudo das celulas nas linhas do DG
                    foreach (DataGridViewCell cell in dgv_org.Rows[i].Cells)
                    {
                        row.Cells[intColIndex].Value = cell.Value;
                        intColIndex++;
                    }
                    dgv_copy.Rows.Add(row);
                }
                dgv_copy.AllowUserToAddRows = false;
                dgv_copy.Refresh();

            }
            catch (Exception ex)
            {
                this.lboxMessage.Items.Insert(0, "** " + DateTime.Now.ToString() + " ** Error -> " + ex.Message);                
            }
            return dgv_copy;
        }

        //Realiza as Configurações e Envios de Email
        private string enviarMail()
        {
            try
            {
                //configurações do Servidor de Email
                SmtpClient smtp = new SmtpClient();
                smtp.Host = "smtp.grupoprovider.com.br";
                smtp.EnableSsl = false;
                smtp.Credentials = new NetworkCredential("suporte.ti.cc", "suportecc2013");
                smtp.Port = 25;

                //Configurado dados para Envio do Email
                MailMessage mail = new MailMessage();
                mail.Sender = new MailAddress("suporte.ti.cc@grupoprovider.com.br", "Suporte Contact Center - Provider");
                mail.From = new MailAddress("suporte.ti.cc@grupoprovider.com.br", "Suporte Contact Center - Provider");
                mail.To.Add("suporte@olos.com.br");
                mail.CC.Add("suporte.ti.cc@grupoprovider.com.br");
                mail.BodyEncoding = Encoding.UTF8;
                mail.IsBodyHtml = true;
                mail.Priority = MailPriority.High;

                mail.Body = "Senhores, ";


                mail.Body = mailDataGridHTML(kdg_Ticket).ToString();

                //Titulo de Email
                mail.Subject = "Status de Tickets - Provider";
                //Corpo email com datagrid


                smtp.Send(mail);
                return ("** " + DateTime.Now.ToString() + " ** Email Enviado Com Sucesso Ao Grupo suporte@Olos.com.br");
            }
            catch (Exception ex)
            {
                return ("** " + DateTime.Now.ToString() + " ** Error -> " + ex.Message);
            }
            finally
            {

            }

        }

        //Faz a Conversão do DatagGrid para Html (Envio de Email)
        private StringBuilder mailDataGridHTML(DataGridView dgStr)
        {
            //novo datagrid
            DataGridView dg = new DataGridView();

            //copiando o Datagrid para não afetar o que está sendo exibido
            dg = CopyDataGridView(dgStr);

            //Removendo Colunas Desnecessárias
            dg.Columns.Remove("Chamado");
            dg.Columns.Remove("Operacao");
            dg.Columns.Remove("DataPrevisao");
            dg.Columns.Remove("DataConclusao");
            dg.Columns.Remove("Resumo");
            dg.Columns.Remove("Fornecedor");
            dg.Columns.Remove("Usuario");
            dg.Columns.Remove("DataAtualizacao");
            dg.Columns.Remove("CriadoPor");

            


            StringBuilder strB = new StringBuilder();
            strB.AppendLine("<small><font color=black face='Segoe UI'><u><b>Senhores,</u></b>");
            strB.AppendLine("<br>");
            strB.AppendLine("Favor verificar o status dos tickets abaixo:");
            strB.AppendLine("<br>");
            strB.AppendLine("<br></font></small>");

            //Criando HTML e Tabela
            strB.AppendLine("<html><body><center><" +
                            "table border='1' cellpadding='0' cellspacing='0'>");
            strB.AppendLine("<tr>");

            //Criando Cabeçalho da Tabela

            for (int i = 0; i < dg.Columns.Count; i++)
            {
                strB.AppendLine("<td align='center' valign='middle'>" +
                                dg.Columns[i].HeaderText + "</td>");
            }

            //Criando corpo da tabela
            for (int i = 0; i < dg.Rows.Count; i++)
            {
                strB.AppendLine("<tr>");
                foreach (DataGridViewCell dgvc in dg.Rows[i].Cells)
                {
                    strB.AppendLine("<td align='Left' valign='middle'>" +
                                    dgvc.Value.ToString() + "</td>");
                }
                strB.AppendLine("</tr>");

            }

            //Rodape da Tabela e Final do Html
            strB.AppendLine("</table></center></body></html>");
            
            //Assinatura do email
            strB.AppendLine("<br>");
            strB.AppendLine("<small><font color=gray face='Segoe UI'><i>Atenciosamente,</i>");
            strB.AppendLine("<br>");
            strB.AppendLine("<font color=black face='Segoe UI'>Suporte Contact Center");
            strB.AppendLine("<br>");
            strB.AppendLine("<font color=black face='Segoe UI'>suporte.ti.cc@grupoprovider.com.br");
            strB.AppendLine("<br>");
            strB.AppendLine("<font color=black face='Segoe UI'>Rua 02 de Julho, 80 – Santo Amaro – Recife – PE</small>");

            return strB;
        }


        #endregion

      

       

      



    }
}
